home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
TPUG - Toronto PET Users Group
/
TPUG Users Group CD
/
TPUG Users Group CD.iso
/
CRS
/
crs47.d81
/
64alv2a.sfx
/
lynx create
(
.txt
)
< prev
next >
Wrap
Commodore BASIC
|
1990-02-12
|
6KB
|
270 lines
1 POKE 53280,11:POKE 53281,12:PRINT "[147]"CHR$(142)
2 PRINT TAB(13)"[151]LYNX COMPILER"
3 PRINT TAB(13)"[163][163][163][163][163][163][163][163][163][163][163][163][163]"
4 PRINT TAB(9)"(C) 1989 WILL CORLEY"
5 DIM S$(5),T$(145),PN$(145),FT(145),FS(145),BL(145),LN(145)
6 DIM RT(145),RL(145),RS(145),LT(145),LS(145),ZT(145),ZS(145)
7 DIM BT(6,120),BS(6,120),TS(6),SS(6)
8 K$=CHR$(0)
9 SD$=" 8=SOURCE DRIVE":SD=VAL(SD$)
10 BA=193*256:TEM=49152
11 FOR X=0 TO 40:READ Y:POKE X+TEM,Y:NEXT X
12 HD$="":FOR X=1 TO 94:READ Y:HD$=HD$+CHR$(Y):NEXT X
13 INPUT "INSERT DISK";A$
14 OPEN 15,SD,15,"I0":GOSUB 231
15 OPEN 2,SD,2,"#":GOSUB 231
16 T=18:S=1:N=0:W=N:BT=N
17 PRINT "[145][Y[146]][151]ES [N[146]][151]O [A[146]][151]UTO [G[146]][151]O [E[146]][151]XIT"
18 GOSUB 178:X=0
19 ZX=X*32:F$="":C=PEEK(BA+2+ZX)
20 IF N=143 AND S3=0 THEN 37
21 IF (C AND 128)<> 128 THEN 37
22 C=(C AND 15):IF C=0 THEN 37
23 GOSUB 181
24 DT=PEEK(BA+3+ZX):DS=PEEK(BA+4+ZX)
25 GOSUB 186
26 GOSUB 189
27 IF (H<>0 AND DT=18) THEN 37
28 POKE 212,1:PRINT F$:POKE 212,0
29 PRINT "[145]";TAB(17) T$
30 IF W=1 THEN A$="Y":GOTO 32
31 POKE 198,0:WAIT 198,1:GET A$
32 IF A$="G" THEN PRINT "[145][145]":GOTO 39
33 IF A$="A" THEN W=1:GOTO 30
34 IF A$="E" THEN CLOSE 2:CLOSE 15:END
35 IF A$<>"Y" THEN PRINT "[145][145]":GOTO 37
36 GOSUB 191
37 X=X+1:IF X<8 THEN 19
38 IF T<>0 THEN 18
39 PRINT " ":CLOSE 2:CLOSE 15
40 OPEN 15,SD,15,"UJ"
41 TI$="000000":WAIT 162,128
42 GET#15,A$:IF ST<>64 THEN 42
43 CLOSE 15
44 IF N=0 THEN END
45 GETA$:IF A$="E" THEN N=0:GOTO 44
46 BL(N+1)=0
47 OPEN 15,SD,15,"I0":GOSUB 231
48 PRINT#15,"M-R"CHR$(250)CHR$(2)CHR$(3)
49 GET#15,D$:L=ASC(D$+K$)
50 GET#15,D$
51 GET#15,D$:H=ASC(D$+K$)*256+L
52 CLOSE 15
53 IF (N/6+5)<H THEN 56
54 PRINT "DISK FULL"
55 POKE 198,0:WAIT 198,1:END
56 LX$=""
57 INPUT "FINAL LYNX FILENAME";LX$
58 IF LEN(LX$)>13 THEN 56
59 IF LEN(LX$)=0 THEN 56
60 LX$=LX$+".LNX"
61 OPEN 15,SD,15:OPEN 3,SD,3,"0:"+LX$+","+"P,R"
62 INPUT#15,E,E$,ET,ES:CLOSE 3:CLOSE 15
63 IF E>19 THEN 66
64 PRINT "FILE EXISTS[151]"
65 POKE 198,0:WAIT 198,1:GOTO 56
66 OPEN 15,SD,15,"I0"
67 GOSUB 231
68 OPEN 2,SD,2,"#":GOSUB 231
69 FOR Z=1 TO N:PRINT "LINKING "PN$(Z)
70 BV=0
71 IF BL(Z)=0 THEN 88
72 IF T$(Z)="R" THEN 81
73 T=FT(Z):S=FS(Z)
74 GOSUB 225:BV=BV+1
75 GET#2,A$:T1=ASC(A$+K$)
76 GET#2,A$:S1=ASC(A$+K$)
77 IF T1<>0 THEN T=T1:S=S1:GOTO 74
78 IF BV<>BL(Z) THEN 228
79 LT(Z)=T:LS(Z)=S:LN(Z)=S1
80 GOTO 88
81 T=RT(Z):S=RS(Z)
82 GOSUB 225:BV=BV+1
83 GET#2,A$:T1=ASC(A$+K$)
84 GET#2,A$:S1=ASC(A$+K$)
85 IF T1<>0 THEN T=T1:S=S1:GOTO 82
86 ZT(Z)=T:ZS(Z)=S
87 GOTO 73
88 NEXT Z
89 FOR Z=1 TO N
90 IF BL(Z)=0 THEN 108
91 IF T$(Z)="R" THEN 104
92 T=LT(Z):S=LS(Z):GOSUB 225
93 IF Z=N THEN 108
94 Y=Z+1
95 IF BL(Y)<>0 THEN 98
96 Y=Y+1:IF Y<N+1 THEN 95
97 GOTO 108
98 IF Y>N THEN 108
99 IF T$(Y)="R" THEN 101
100 PRINT#2,CHR$(FT(Y));CHR$(FS(Y));:GOTO 102
101 PRINT#2,CHR$(RT(Y));CHR$(RS(Y));
102 PRINT#15,"U2";2;0;T;S:GOSUB 231
103 GOTO 108
104 T=ZT(Z):S=ZS(Z):GOSUB 225
105 PRINT#2,CHR$(FT(Z));CHR$(FS(Z));
106 PRINT#15,"U2";2;0;T;S:GOSUB 231
107 GOTO 92
108 NEXT Z:CLOSE 2
109 PRINT "CREATING LYNX HEADER"
110 PRINT#15,"I0":GOSUB 231:OPEN 3,SD,3,"0:"+LX$+","+"P,W":GOSUB 231
111 PRINT#3,HD$
112 PRINT#3," *LYNX XVII WILL CORLEY":PRINT#3,N
113 FOR Z=1 TO N
114 PRINT#3,PN$(Z):PRINT#3,BL(Z):PRINT#3,T$(Z)
115 IF T$(Z)="R" THEN PRINT#3,RL(Z)
116 PRINT#3,LN(Z)
117 NEXT Z:CLOSE 3:GOSUB 231
118 PRINT "WRITING DIRECTORY":PRINT#15,"I0":GOSUB 231
119 IF LEN(LX$)<16 THEN LX$=LX$+CHR$(160):GOTO 119
120 OPEN 2,SD,2,"#":GOSUB 231:T=18:S=1:F1=0
121 PRINT#15,"U1";2;0;T;S:GOSUB 231
122 PRINT#15,"B-P";2;0:POKE 251,0:POKE 252,193:SYSTEM
123 T1=PEEK(BA):S1=PEEK(BA+1)
124 F3=0:X=0
125 ZX=X*32:F$="":GOSUB 186
126 IF F$=LX$ THEN 133
127 IF (F1=N) OR (PN$(F1+1)<>F$) THEN 129
128 PRINT#15,"B-P";2;X*32+2:PRINT#2,K$;:F3=1:F1=F1+1
129 X=X+1:IF X<8 THEN 125
130 IF F3=1 THEN PRINT#15,"U2";2;0;T;S:GOSUB 231
131 IF T1=0 THEN 139
132 T=T1:S=S1:GOTO 121
133 HB=PEEK(BA+31+ZX)*256+PEEK(BA+30+ZX):BT=HB+BT
134 FT(0)=PEEK(BA+3+ZX):FS(0)=PEEK(BA+4+ZX)
135 PRINT#15,"B-P";2;X*32+30
136 H=INT(BT/256):L=BT-(H*256)
137 PRINT#2,CHR$(L);CHR$(H);
138 F3=1:GOTO 129
139 T=FT(0):S=FS(0)
140 PRINT#15,"U1";2;0;T;S:GOSUB 231
141 LZ=LEN(HD$)+3
142 PRINT#15,"B-P";2;LZ
143 PRINT#2,STR$(HB);
144 PRINT#15,"U2";2;0;T;S
145 GOTO 147
146 PRINT#15,"U1";2;0;T;S:GOSUB 231
147 PRINT#15,"B-P";2;0
148 GET#2,D$:T1=ASC(D$+K$)
149 GET#2,D$:S1=ASC(D$+K$)
150 IF T1<>0 THEN T=T1:S=S1:GOTO 146
151 Y=1
152 IF BL(Y)<>0 THEN 155
153 Y=Y+1:IF Y<N+1 THEN 152
154 GOTO 159
155 PRINT#15,"B-P";2;0
156 A$=CHR$(FT(Y))+CHR$(FS(Y)):IF T$(Y)="R" THEN A$=CHR$(RT(Y))+CHR$(RS(Y))
157 PRINT#2,A$;
158 PRINT#15,"U2";2;0;T;S:GOSUB 231
159 CLOSE 2:CLOSE 15:END
160 I$="":C=0
161 POKE 646,1:POKE 647,1:POKE 204,C:POKE 198,0:WAIT 198,1:GET A$
162 IF A$=CHR$(34) OR A$=CHR$(141) THEN 161
163 IF A$<>CHR$(13) THEN 167
164 POKE 204,1:IF LEN(I$)=CM THEN 166
165 A$=" "+A$
166 PRINT A$:RETURN
167 POKE 204,1:IF LEN(I$)=CM THEN 169
168 A=(PEEK(210)*256+PEEK(209)+PEEK(211)):POKE A,PEEK(A) AND 127
169 IF A$<>CHR$(20) THEN 173
170 IF LEN(I$)=0 THEN PRINT " [157]";:GOTO 161
171 I$=LEFT$(I$,LEN(I$)-1)
172 PRINT "[157] [157]";:C=0:GOTO 161
173 IF LEN(I$)=CM THEN 161
174 IF ASC(A$)=160 THEN PRINT " [146]";:GOTO 176
175 POKE 212,1:PRINT A$;:POKE 212,0
176 I$=I$+A$:IF LEN(I$)=CM THEN C=1
177 GOTO 161
178 PRINT#15,"U1";2;0;T;S:GOSUB 231:PRINT#15,"B-P";2;0:GOSUB 231
179 POKE 251,0:POKE 252,193:SYSTEM:T=PEEK(BA):S=PEEK(BA+1):RETURN
180 IF C=0 THEN T$="DEL"
181 IF C=1 THEN T$="SEQ"
182 IF C=2 THEN T$="PRG"
183 IF C=3 THEN T$="USR"
184 IF C=4 THEN T$="REL"
185 RETURN
186 FOR Y=BA+5+ZX TO BA+20+ZX
187 D$=CHR$(PEEK(Y))
188 F$=F$+D$:NEXT Y:RETURN
189 H=PEEK(BA+31+ZX)*256+PEEK(BA+30+ZX)
190 RT=PEEK(BA+21+ZX):RS=PEEK(BA+22+ZX):RL=PEEK(BA+23+ZX):RETURN
191 N=N+1
192 PN$(N)=F$
193 FT(N)=DT
194 FS(N)=DS
195 BL(N)=H
196 BT=BT+H
197 T$(N)=LEFT$(T$,1)
198 RT(N)=RT
199 RS(N)=RS
200 RL(N)=RL
201 RETURN
202 D=16-LEN(PN$(Z))
203 IF D=0 THEN 207
204 FOR Y=1 TO D
205 A$=A$+CHR$(160)
206 NEXT Y
207 B$=LEFT$(C$,3)
208 RETURN
209 A$=A$+B$+C$
210 H=INT(BL(Z)/256)
211 L=BL(Z)-(H*256)
212 A$=A$+CHR$(L)+CHR$(H)
213 IF X<>7 THEN A$=A$+K$+K$
214 Z=Z+1:RETURN
215 IF LEN(A$)<254 THEN A$=A$+K$:GOTO 215
216 S=ND
217 ND=ND+3
218 IF ND>18 THEN ND=ND-17
219 PRINT#15,"B-P";2;0
220 IF Z>N THEN PRINT#2,K$;CHR$(255);:GOTO 222
221 PRINT#2,CHR$(18);CHR$(ND);
222 PRINT#2,A$;
223 PRINT#15,"U2";2;0;18;S:GOSUB 231
224 RETURN
225 PRINT#15,"U1";2;0;T;S:GOSUB 231
226 PRINT#15,"B-P";2;0:GOSUB 231
227 RETURN
228 PRINT "FILE LENGTH ERROR"
229 CLOSE 2:CLOSE 15
230 POKE 198,0:WAIT 198,1:END
231 INPUT#15,E,E$,ET,ES:IF E>19 THEN CLOSE 2:CLOSE 3:GOTO 233
232 RETURN
233 PRINT E;E$;ET;ES
234 END
235 IF BL(Z)<122 THEN SS=1:RETURN
236 IF BL(Z)<243 THEN SS=2:RETURN
237 IF BL(Z)<364 THEN SS=3:RETURN
238 IF BL(Z)<485 THEN SS=4:RETURN
239 IF BL(Z)<606 THEN SS=5:RETURN
240 SS=6:RETURN
241 A$="":FOR X=1 TO 28:GET#2,B$:A$=A$+B$:NEXT:GET#2,B$
242 B$="*LYNX":X=1:RZ=0
243 IF MID$(A$,X,5)=B$ THEN RZ=1:RETURN
244 IF MID$(A$,X,4)="LYNX" THEN RETURN
245 X=X+1:IF X<22 THEN 243
246 CLOSE 2:CLOSE 15:S3=-1
247 PRINT "NOT A LYNXED FILE"
248 POKE 198,0:WAIT 198,1:END
249 OPEN 15,SD,15,"I0":GOSUB 231
250 OPEN 2,SD,2,"0:"+PN$(1)+","+T$(1)+",R":GOSUB 231
251 GET#2,A$:A=ASC(A$+K$)
252 GET#2,A$:B=ASC(A$+K$)
253 ZR=0:IF (A=1 AND B=8) THEN ZR=1
254 CLOSE 2:CLOSE 15:RETURN
255 DATA 162,2,32,198,255,160,0,32,228,255
256 DATA 145,251,200,208,248,32,204,255,96,162
257 DATA 2,32,198,255,162,25,160,0,32,228
258 DATA 255,145,251,200,202,208,247,32,204,255
259 DATA 96
260 DATA 1,8,91,8,10,0,151,53,51,50
261 DATA 56,48,44,48,58,151,53,51,50,56
262 DATA 49,44,48,58,151,54,52,54,44,194
263 DATA 40,49,54,50,41,58,153,34,147,17
264 DATA 17,17,17,17,17,17,17,34,58,153
265 DATA 34,32,32,32,32,32,85,83,69,32
266 DATA 76,89,78,88,32,84,79,32,68,73
267 DATA 83,83,79,76,86,69,32,84,72,73
268 DATA 83,32,70,73,76,69,34,58,137,49
269 DATA 48,0,0,0